Riverside County Project - Demographic Data for Riverside County

Map 1: poverty rate

#install all required packages
library(gmapsdistance)
library(choroplethr)
## Loading required package: acs
## Loading required package: stringr
## Loading required package: XML
## 
## Attaching package: 'acs'
## The following object is masked from 'package:base':
## 
##     apply
library(choroplethrMaps)
library(rvest)
## Loading required package: xml2
## 
## Attaching package: 'rvest'
## The following object is masked from 'package:XML':
## 
##     xml
library(tidyverse)
## ── Attaching packages ────────────────────────────────────────────────────────────────────────────────────────────── tidyverse 1.2.1 ──
## ✔ ggplot2 2.2.1     ✔ readr   1.1.1
## ✔ tibble  1.4.2     ✔ purrr   0.2.4
## ✔ tidyr   0.8.0     ✔ dplyr   0.7.4
## ✔ ggplot2 2.2.1     ✔ forcats 0.3.0
## ── Conflicts ───────────────────────────────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::combine()        masks acs::combine()
## ✖ dplyr::filter()         masks stats::filter()
## ✖ readr::guess_encoding() masks rvest::guess_encoding()
## ✖ dplyr::lag()            masks stats::lag()
## ✖ purrr::pluck()          masks rvest::pluck()
## ✖ rvest::xml()            masks XML::xml()
library(ggplot2)
library(ggmap)
library(readxl)
library(mapview)
library(leaflet)
## 
## Attaching package: 'leaflet'
## The following object is masked from 'package:mapview':
## 
##     addMapPane
library(htmlwidgets)
library(rgdal)
## Loading required package: sp
## rgdal: version: 1.2-18, (SVN revision 718)
##  Geospatial Data Abstraction Library extensions to R successfully loaded
##  Loaded GDAL runtime: GDAL 2.1.3, released 2017/20/01
##  Path to GDAL shared files: /Library/Frameworks/R.framework/Versions/3.4/Resources/library/sf/gdal
##  GDAL binary built with GEOS: FALSE 
##  Loaded PROJ.4 runtime: Rel. 4.9.3, 15 August 2016, [PJ_VERSION: 493]
##  Path to PROJ.4 shared files: /Library/Frameworks/R.framework/Versions/3.4/Resources/library/sf/proj
##  Linking to sp version: 1.2-7
#install.packages("gpclib")
library(gpclib)
## General Polygon Clipper Library for R (version 1.5-5)
##  Type 'class ? gpc.poly' for help
library(maptools)
## Checking rgeos availability: FALSE
##      Note: when rgeos is not available, polygon geometry     computations in maptools depend on gpclib,
##      which has a restricted licence. It is disabled by default;
##      to enable gpclib, type gpclibPermit()
#install.packages("maptools")

#read in shapefile
setwd ("~/Dropbox/ucr/2018spring/POSC207/shapefiles")

demo_tract_16 <- readOGR("~/Dropbox/ucr/2018spring/POSC207/shapefiles",
                         "demographic_census_2016")
## OGR data source with driver: ESRI Shapefile 
## Source: "/Users/sunnyshao/Dropbox/ucr/2018spring/POSC207/shapefiles", layer: "demographic_census_2016"
## with 453 features
## It has 61 fields
## Integer64 fields read as strings:  ALAND AWATER demo_AREAW demo_tot_p demo_age_c demo_age_1 demo_age_2 demo_age_3 demo_black demo_AIAN demo_asian demo_nhpi demo_other demo_two_o demo_white demo_media demo_latin demo_less_ demo_hs demo_some_ demo_ba_hi de_pov_you de_pov_sen de_pov_blk de_pov_ain de_pov_aa de_pov_nhp de_pov_la de_pov_nhw de_pov_all
#turn geoid (census tract fipscode) into character
demo_tract_16$GEOID <- as.character(demo_tract_16$GEOID)

#extract only the shape of the shapefile
if (!require(gpclib)) install.packages("gpclib", type="source")
gpclibPermit()
## Warning in gpclibPermit(): support for gpclib will be withdrawn from
## maptools at the next major release
## [1] TRUE
points <- fortify(demo_tract_16, region = 'GEOID')

#getting riverside county google map
riverside <- qmap("Thermal, CA", zoom=8)
## Map from URL : http://maps.googleapis.com/maps/api/staticmap?center=Thermal,+CA&zoom=8&size=640x640&scale=2&maptype=terrain&language=en-EN&sensor=false
## Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=Thermal,%20CA&sensor=false
## Warning: `panel.margin` is deprecated. Please use `panel.spacing` property
## instead
#extracting data from the shapefile 
data <- as.data.frame(demo_tract_16)
data <- data %>% select(GEOID, pct_pov_al)
#rename the variable for better map labelling
data <- plyr::rename(data, c("pct_pov_al" = "poverty rate"))
#merge the data back into the shape file
points2 <- merge(points, data, by.x='id', by.y='GEOID', all.x=TRUE)



#version 1: one color heat map
riverside + geom_polygon(aes(x=long,y=lat, group=group, fill=`poverty rate`, alpha=0.9), 
                         data=points2, color='black', size = 0.1) +
                         scale_fill_gradient(low='white', high='red')

# version 2: two-color style
riverside + geom_polygon(aes(x=long,y=lat, group=group, fill=`poverty rate` , alpha=0.9), 
                         data=points2, color='black', size = 0.1) +
                         scale_fill_distiller(palette='Spectral') + 
                         scale_alpha(range=c(0.5,0.5), guide = 'none') #hide legend for transparency setting

#web mapping
pal_fun <- colorQuantile("YlOrRd", NULL, n = 5)

p_popup <- paste0("<strong>Poverty Rate: </strong>", demo_tract_16$pct_pov_al)

leaflet(demo_tract_16) %>%
  addPolygons(
    stroke = FALSE, # remove polygon borders
    fillColor = ~pal_fun(pct_pov_al), # set fill color with function from above and value
    fillOpacity = 0.6, smoothFactor = 0.5, # make it nicer
    popup = p_popup) %>% # add popup
    addProviderTiles("CartoDB.Positron") %>%
    addLegend("bottomright",  # location
            pal=pal_fun,    # palette function
            values=~pct_pov_al,  # value to be passed to palette function
            title = 'Overall Percent Poverty Rate') # legend title

Map 2: Trying to map another outcome (percent BA or higher)

#read in shapefile
demo_tract_16 <- readOGR("~/Dropbox/ucr/2018spring/POSC207/shapefiles",
                         "demographic_census_2016")
## OGR data source with driver: ESRI Shapefile 
## Source: "/Users/sunnyshao/Dropbox/ucr/2018spring/POSC207/shapefiles", layer: "demographic_census_2016"
## with 453 features
## It has 61 fields
## Integer64 fields read as strings:  ALAND AWATER demo_AREAW demo_tot_p demo_age_c demo_age_1 demo_age_2 demo_age_3 demo_black demo_AIAN demo_asian demo_nhpi demo_other demo_two_o demo_white demo_media demo_latin demo_less_ demo_hs demo_some_ demo_ba_hi de_pov_you de_pov_sen de_pov_blk de_pov_ain de_pov_aa de_pov_nhp de_pov_la de_pov_nhw de_pov_all
#turn geoid (census tract fipscode) into character
demo_tract_16$GEOID <- as.character(demo_tract_16$GEOID)

#extract only the shape of the shapefile
if (!require(gpclib)) install.packages("gpclib", type="source")
gpclibPermit()
## Warning in gpclibPermit(): support for gpclib will be withdrawn from
## maptools at the next major release
## [1] TRUE
points <- fortify(demo_tract_16, region = 'GEOID')

#getting riverside county google map
riverside <- qmap("Thermal, CA", zoom=8)
## Map from URL : http://maps.googleapis.com/maps/api/staticmap?center=Thermal,+CA&zoom=8&size=640x640&scale=2&maptype=terrain&language=en-EN&sensor=false
## Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=Thermal,%20CA&sensor=false
## Warning: `panel.margin` is deprecated. Please use `panel.spacing` property
## instead
#extracting data from the shapefile 
data <- as.data.frame(demo_tract_16)
data <- data %>% select(GEOID, pct_ba_hi)
#rename the variable for better map labelling
data <- plyr::rename(data, c("pct_ba_hi" = "Percent BA Degree or Higher"))
#merge the data back into the shape file
points2 <- merge(points, data, by.x='id', by.y='GEOID', all.x=TRUE)

#version 1: one color heat map
riverside + geom_polygon(aes(x=long,y=lat, group=group, fill=`Percent BA Degree or Higher`, alpha=0.9), 
                         data=points2, color='black', size = 0.1) +
                         scale_fill_gradient(low='white', high='red')

# version 2: two-color style
riverside + geom_polygon(aes(x=long,y=lat, group=group, fill=`Percent BA Degree or Higher`, alpha=0.9), 
                         data=points2, color='black', size = 0.1) +
                         scale_fill_distiller(palette='Spectral') + 
                         scale_alpha(range=c(0.6,0.6), guide = 'none') #hide legend for transparency setting

pal_fun <- colorQuantile("YlOrRd", NULL, n = 5)

p_popup <- paste0("<strong>Poverty Rate: </strong>", demo_tract_16$pct_ba_hi)

leaflet(demo_tract_16) %>%
  addPolygons(
    stroke = FALSE, # remove polygon borders
    fillColor = ~pal_fun(pct_ba_hi), # set fill color with function from above and value
    fillOpacity = 0.6, smoothFactor = 0.5, # make it nicer
    popup = p_popup) %>% # add popup
    addProviderTiles("CartoDB.Positron") %>%
    addLegend("bottomright",  # location
            pal=pal_fun,    # palette function
            values=~pct_ba_hi,  # value to be passed to palette function
            title = 'Share of total population that has BA degree or higher') # legend title